package com.spzx.product.helper;

import com.spzx.product.api.domain.vo.CategoryVo;

import java.util.ArrayList;
import java.util.List;

/**
 * ClassName: CategoryHelper
 * Package: com.spzx.product.helper
 * Description:
 *
 * @Author 咚咚小圆帽
 * @Create 2025/3/16 20:12
 * @Version 1.0
 */
public class CategoryHelper {

    /**
     * 将扁平结构的数据组装成为树形结构的数据
     *
     * @param categoryVoList
     * @return
     */
    public static List<CategoryVo> buildTree(List<CategoryVo> categoryVoList) {
        ArrayList<CategoryVo> tree = new ArrayList<>();
        for (CategoryVo categoryVo : categoryVoList) {
            //如果parent_id等于0的话，那么就是顶层记录
            if (categoryVo.getParentId() == 0) {
                //把该记录的孩子们找出来，封装到该记录中
                categoryVo = findAndAddChildren(categoryVo, categoryVoList);
                //把顶级节点返回到tree中
                tree.add(categoryVo);
            }
        }
        return tree;
    }

    private static CategoryVo findAndAddChildren(CategoryVo categoryVo, List<CategoryVo> categoryVoList) {
        for (CategoryVo vo : categoryVoList) {
            //如果vo的parent_id等于我们传进来的categoryVo的id
            //那么vo就是categoryVo的孩子
            if (vo.getParentId() == categoryVo.getId()) {
                //通过递归调用的方式找到vo的孩子
                CategoryVo children = findAndAddChildren(vo, categoryVoList);
                //将孩子添加到categoryVo中
                categoryVo.getChildren().add(children);
            }
        }
        return categoryVo;
    }

}
